package com.sky.config;

import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 配置类，用于创建AliOssUtil对象
 */
@Configuration  //该注解表示这是一个配置类，它会被 Spring 容器扫描并注册为一个配置类。// 配置类通常用于定义 beans 和进行相关配置。
@Slf4j
public class OssConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties) {  // 8. 定义了一个方法 `aliOssUtil`，该方法会根据提供的 `AliOssProperties` 配置信息创建并返回 `AliOssUtil` 实例。

        log.info("开始创建阿里云OSS文件上传工具类对象:{}",aliOssProperties);  // 9. 使用 Lombok 生成的日志对象 `log` 输出一条信息，表示正在创建阿里云 OSS 工具类。适合用于调试和追踪代码执行。

        // 10. 创建并返回 `AliOssUtil` 实例，构造函数需要传入 OSS 的相关配置信息，这些配置信息来自 `AliOssProperties` 对象。
        return new AliOssUtil(
                aliOssProperties.getEndpoint(),  // 11. 获取 `aliOssProperties` 中的 `endpoint` 配置，用于连接 OSS 的服务端。
                aliOssProperties.getAccessKeyId(),  // 12. 获取 `aliOssProperties` 中的 `accessKeyId`，阿里云的访问密钥 ID，用于身份认证。
                aliOssProperties.getAccessKeySecret(),  // 13. 获取 `aliOssProperties` 中的 `accessKeySecret`，阿里云的访问密钥 Secret，用于身份认证。
                aliOssProperties.getBucketName()  // 14. 获取 `aliOssProperties` 中的 `bucketName`，OSS 的存储空间名称。
        );  // 15. 返回创建好的 `AliOssUtil` 实例，Spring 会管理这个实例，并提供依赖注入功能。
    }





}
